from common import get_logger, browser

logger = get_logger(__name__)


def post_to_zhihu(title, intro, img_paths):
    extra_info = "无"
    try:
        # 记录开始发布知乎的日志信息，包含标题和图片路径
        logger.info(f"准备自动发到知乎，标题：{title}，图片：{img_paths}")
        # 打开知乎专栏写作页面
        tab = browser.new_tab("https://zhuanlan.zhihu.com/write")
        # 等待页面加载完成
        tab.wait(3)

        # 查找标题输入框元素，使用特定的CSS类选择器
        title_input = tab("tag:textarea@class:i7cW1UcwT6ThdhTakqFm", timeout=30)
        # 检查标题长度是否超过100个字符，如果超过则截取前100个字符
        if len(title) > 100:
            title = title[:100]
        # 在标题输入框中输入标题内容
        title_input.input(title)
        # 等待输入完成
        tab.wait(1)

        # 查找正文输入区域元素，使用DraftEditor-root类选择器
        intro_input = tab("tag:div@class:DraftEditor-root", timeout=30)
        # 在正文输入区域中输入正文内容
        intro_input.input(intro)

        # 按回车键换行 模拟键盘点击，解决已有输入内容自动被清空的问题
        tab.actions.key_down("Shift")
        tab.actions.key_down("Enter")
        tab.actions.key_up("Enter")
        tab.actions.key_up("Shift")
        tab.wait(2)
        # 查找并点击工具栏中的图片上传按钮
        uplload_img_btn = tab("tag:button@aria-label=图片", timeout=10)
        # 点击图片上传按钮
        uplload_img_btn.click()
        # 等待按钮响应
        tab.wait(1)
        # 设置要上传的图片文件路径，多个路径用换行符分隔
        tab.set.upload_files("\n".join(img_paths))
        # 查找图片上传确认按钮
        img_btn = tab("tag:div@class:css-8x20s2", timeout=10)
        # 点击图片上传确认按钮
        img_btn.click()
        # 等待图片上传完成
        tab.wait(3)
        # 查找图片上传完成后的确认按钮
        img_btn = tab("tag:button@class:css-owamhi", timeout=10)
        # 点击图片上传完成确认按钮
        img_btn.click()
        # 等待按钮响应
        tab.wait(1)

        # 查找发布按钮
        publish_btn = tab("tag:button@text()=发布", timeout=30)
        # 点击发布按钮
        publish_btn.click()
        # 等待发布完成
        tab.wait(3)
        # 记录发布成功的日志信息
        logger.info("知乎专栏上传成功~~")
        status = 1
    except Exception as e:
        status = 2
        extra_info = str(e)
        logger.error(extra_info)
    return {"status": status, "extra_info": extra_info}

